package com.xnyzc.lhy.order.service.order;

import com.baomidou.mybatisplus.extension.service.IService;
import com.xnyzc.lhy.common.entity.Rv;
import com.xnyzc.lhy.order.entity.mq.OaCOrderPersonal;
import com.xnyzc.lhy.order.entity.order.OaDOrder;
import com.xnyzc.lhy.order.entity.gps.OaDVehicleGps;
import com.xnyzc.lhy.order.entity.order.OaOrderOtherPrice;
import com.xnyzc.lhy.order.entity.param.order.*;

import java.math.BigDecimal;
import java.util.List;


/**
 * <p>
 * 司机接单表 服务类
 * </p>
 *
 * @author huxuekuo
 * @since 2019-07-19
 */
public interface IOaDOrderService extends IService<OaDOrder> {

    /**
     * 司机订单生成
     *
     * @param oaDOrder 司机接单表
     * @return
     */
    Boolean addDriverOrderInfo(OaDOrder oaDOrder);

    /**
     * 滴滴取消订单
     *
     * @param orderDetailParam
     * @return
     */
    void updateOrderPersonalStatus(OrderDetailParam orderDetailParam);

    /**
     * 抢单失败，修改状态
     *
     * @param orderNo
     * @return
     */
    Boolean singleFailureStatus(String orderNo);

    /**
     * 解除司机锁定
     *
     * @param driverId
     * @return
     */
    Boolean driverUnlock(String driverId);

    /**
     * 获取司机手机号
     *
     * @param driverId 司机ID
     * @return
     */
    String getDriverPhone(String driverId);

    /**
     * 查询订单信息
     *
     * @param orderNo
     * @return
     */
    OaCOrderPersonal billDetails(String orderNo);

    /**
     * 司机实时轨迹与人员实时轨迹绑定订单号
     *
     * @param nearCar    车辆实时轨迹实体类
     * @param pOrderBack 订单实体类
     * @return
     */
    boolean addOrder(OaDVehicleGps nearCar, OrderParam pOrderBack);


    /**
     * 前往预约地点
     *
     * @param dUserId 司机用户ID
     * @param orderNo 订单号
     * @return
     */
    Rv startRoute(String dUserId, String orderNo);

    /**
     * 更新订单详细信息
     * @param oaSysOrderDetailsParam
     * @return
     */
    Rv updateOrderDetails(OaSysOrderDetailsParam oaSysOrderDetailsParam);

    /**
     * 确认上车
     * 1.根据车辆订单号查询人员订单号,更改确认时间
     *
     * @param notarizeGetOnOrder
     * @return
     */
    Rv notarizeGetOn(NotarizeGetOnOrder notarizeGetOnOrder);


    /**
     * 到达预约地点
     *
     * @return
     */
    Rv arriveReservation(NotarizeGetOnOrder notarizeGetOnOrder);


    /**
     * 到达目的地
     *
     * @param order 订单号
     * @returnHALL
     */
    Rv endTakingPassengers(OrderArrivalsParam order);


    /**
     * 发起收款
     *
     * @param paymentParam
     * @return
     */
    Rv initiatePayment(InitiatePaymentParam paymentParam);

    /**
     * 获取订单金额
     *
     * @param orderNo 订单号
     * @return
     */
    Rv getInitiatePaymentInfo(String orderNo, String appCode);

    /**
     * 获取司机订单状态
     *
     * @return
     */
    Rv getDriverOrderStatus();


    /**
     * 司机端根据订单号获取订单支付详情
     *
     * @param orderNo
     * @return
     */
    Rv getDriverOrderDetails(String orderNo);

    /**
     * 获取历史轨迹
     *
     * @param orderNo
     * @return
     */
    Rv getHistoryGps(String orderNo);


    Boolean updateUserOrderInfo(OaCOrderPersonal oaCOrderPersonal);

    /**
     * 查询订单的其他费用
     *
     * @param orderNo
     * @return
     */
    List<OaOrderOtherPrice> queryOrderOtherPrice(String orderNo);

    /**
     * 更新其他费用
     *
     * @param otherPrices 其他费用
     * @return
     */
    boolean updateOrderOtherPrice(List<OaOrderOtherPrice> otherPrices);

    void saveOaDBill(Long driverId, String orderId, BigDecimal drawFee);
    /**
     * 上传点位数据
     * @param oaDOrder
     * @return
     */
    boolean uploadTrackFromMongo(OaDOrder oaDOrder);
}
